#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <aio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

#define BUF_SIZE 1024

// ./awrite  文件名 数据
int main(int argc, const char *argv[]){
     if(argc != 3) return -1;
     
      struct aiocb cb = {
          .aio_fildes = open(argv[1], O_WRONLY|O_APPEND),
          .aio_buf =(char *)argv[2],  // 写入的数据
          .aio_nbytes=strlen(argv[2]),  // 写入数据的大小
          .aio_reqprio = 1
      };
      if(cb.aio_fildes < 2) {
         perror("open");
	 return -1;
      } 

      int ret = aio_write(&cb);
      if(ret == 0){
          // AIO请求成功
          while(aio_error(&cb) == EINPROGRESS);
          
          // 请求处理完成
          ssize_t len = aio_return(&cb); // 获取写入文件数据的实际大小
          printf("write ok : %ld\n", len);
      }else{
          perror("aio_write");
      }
      close(cb.aio_fildes); // 关闭操作文件
    
     return 0;
}
